/*************************************************************************
	> File Name: oj-531_television.cpp
	> Author: Wang Bo
	> Mail: 1276106221@qq.com
	> Created Time: 2020年11月20日 星期五 20时54分12秒
 ************************************************************************/

#include <iostream>
#include <queue>
using namespace std;

struct node {
    //status 那些按钮被按下去了的状态对应的int值
    int status, step;
};

//num2 二进制数组 -> 按下i按钮对应状态的二进制的值
//check 去重数组，记录二进制表示的状态
//num 按下i按钮后弹出按钮的值相加的二进制值
int n, num2[22] = {1}, check[2200000], num[25];

void init() {
    for (int i = 1; i <= 20; i++) {
        num2[i]  = num2[i - 1] * 2;
    }
}

int main() {
    init();
    cin >> n;
    int start = 0;
    //记录初始状态的二进制值对应int值
    for (int i = 1; i <= n; ++i) {
        int t;
        cin >> t;
        if (t == 1) {
            start += num2[i];
        }
    }
    //记录每种按钮按下会弹出按钮的状态的二进制对应int值
    for (int i = 1; i <= n; ++i) {
        int t;
        cin >> t;
        for (int j = 1; j <= t; ++j) {
            int t2;
            cin >> t2;
            num[i] += num2[t2];
        }
    }
    queue<node> que;
    que.push((node){start, 0});
    check[start] = 1;
    while (!que.empty()) {
        node temp = que.front();
        que.pop();
        if (temp.status == 8) {
            cout << temp.step << endl;
            return 0;
        }
        //对所有未被按下的按键，尝试按下
        for (int i = 1; i <= n; ++i) {
            //如果第i个按键没有被按下去, &运算结果就是0
            //如果按下去了就不管了继续循环
            if ((temp.status & num2[i]) == 0) {
                //计算按下去后状态的二进制对应的int值
                int t = temp.status;
                t &= ~num[i];  //弹出按下i弹出的
                //num[i]取反就是留下的那些按钮
                //再与t也就是当前状态按位与
                //结果就当前状态按下之后弹出按钮之后剩下按钮的状态（不包括按下的按钮）
                t |= num2[i];  //按下i
                //把i按下去对应值按位与之后就得到了完整的状态
                if (check[t] == 0) {
                    //如果这个状态没有遇到过，压入队列
                    que.push((node){t, temp.step + 1});
                    check[t] = 1;
                }
            }
        }
    }
    cout << -1 << endl;
    return 0;
}
